﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Negocios
{
    public class FaturaBO
    {
        private int id_Compra;

        public int Id_Compra
        {
            get { return id_Compra; }
            set { id_Compra = value; }
        }

        private ClienteBO cliente;

        public ClienteBO Cliente
        {
            get
            {

                conferirCliente(cliente);
                return cliente;
            }
            set
            {
                conferirCliente(cliente);
                cliente = value;
            }
        }

        private ProgramacaoBO programacao;

        public ProgramacaoBO Programacao
        {
            get
            {
                conferirProgramacao(programacao);
                return programacao;
            }
            set
            {
                conferirProgramacao(programacao);
                programacao = value;
            }
        }

        private double preco;

        public double Preco
        {
            get
            {
                conferirPreco(preco);
                return preco;
            }
            set
            {
                conferirPreco(preco);
                preco = value;
            }
        }
        private DateTime dataCompra;

        public DateTime Data
        {
            get
            {
                try { conferirData(Data); }
                catch (BOException BOEx) { throw new BOException(BOEx.Message); }

                return dataCompra;
            }
            set { dataCompra = value; }
        }

        // Implementação das Regras de Negócio

        //checa se o objeto cliente está preenchico
        private void conferirCliente(ClienteBO cliente)
        {
            if (cliente == null)
            {
                throw new BOException("O Cliente deve ser informado.");
            }

            if (cliente.Cpf.Length != 11)
            {
                throw new BOException("O CPF do cliente deve possuir 11 dígitos.");
            }
        }

        //checa se o episódio está preenchido
        private void conferirProgramacao(ProgramacaoBO programacao)
        {
            if (programacao == null)
            {
                throw new BOException("A Programação deve ser informada.");
            }
        }

        //checa se o preço está preenchido
        private void conferirPreco(double preco)
        {
            if (preco == 0)
            {
                throw new BOException("O Preço do Episódio deve ser informado.");
            }
        }

        //checa se a data está preenchida
        private void conferirData(DateTime data)
        {
            if (data == null)
            {
                throw new BOException("A Data deve ser informada.");
            }
        }
    }
}
